Serial Peripheral Interface,
SPI裝置之間使用四條線來溝通,分別是:
-
Slave Select/ Chip Select
-
Master Input Slave Output
-
Master Output Slave Input
-
Serial Clock
跟I2C 有點類似,都有一個時脈線,
I2C 透過從機位址來決定要與哪個裝置進行通訊,而SPI 是使用SS 線來指定從機,
I2C 使用一條SDA 線來進行資料雙向傳輸,而SPI 則是使用兩條線個別負責兩個方向的資料傳輸。
除此之外SPI 和I2C 一樣,都可以串接多個裝置,
多個SPI裝置可以共用同一組 MISO、MOSI和SCLK這三條線,
串接方式如下圖;(取自維基百科)
SPI 在使用上有兩個參數需要注意,分別是:
- CPOL(Clock Polarity),代表SCLK 在閒置時的電位
- CPHA(Clock Phase),代表SCLK 在哪個位置時取值
CPOL 應該滿容易理解的,電位不是高就是低。
但CPHA 可能比較令人感到疑惑,這到底是什麼意思?
我們先假設時鐘線在閒置的時候是低電位,
所以當我們需要送一個位元(1 bit)的資料時,
就會先把資料線先準備好,如果我要送1的資料出去,就會把資料線的準位設成高電位,
接著從時鐘線送出一個方波,送出的過程大概是這樣:
- 從閒置的低電位上升到高電位
- 維持高電位一段時間
- 再從高電位回到低電位
那我是要以哪個時間為基準呢?
CPHA就是用來定義這個基準的參數,
CPHA = 0,就表示資料取值的時間點會落在 1.
CPHA = 1,就表示資料取值的時間點會落在 3.
所以大家在使用SPI 的時候,
除了腳位的定義外,
也別忘了CPOL 和 CPHA,
第一天連假成功發文了,
中華民國108歲生日快樂。
參考文章: